
◎ 演算ライブラリ及び、システムライブラリについて

ライブラリで使用する数値は以下の使用に基づいています。

ポジション、三角関数等の固定小数点データ :
    上位１６ビットが整数部、下位１６ビットが小数部のトータル３２ビット(符号付き)
    型名称  FIXED

例)
    16.5 を 表す場合	:   0x0010_8000
			      ---- ----
				|    |__ 小数部
				|__ 整数部
    座標は 左右方向がＸ軸(プラスは右)、上下方向がＹ軸(プラスは下)、奥行方向が
    Ｚ軸(プラスは奥)になります。


角度 :
    ３６０度を１６ビットで表す
    型名称  ANGLE

例)
    90.0゜ :  0x4000
    45.0゜ :  0x2000
    22.5゜ :  0x1000
    11.25゜:  0x0800

    回転行列を作成した場合、角度のプラス方向は軸に対して右回転になります。

行列 :
    数値は FIXED を使用。３ｘ４の行列で、メモリ上の配置は以下の通り。
    M00 , M01 , M02 ,
    M10 , M11 , M12 ,
    M20 , M21 , M22 ,
    M30 , M31 , M32


◎ 各ライブラリ関数について

void slInitMatrix(void)
  機能 : マトリクス演算で使用する変数、バッファの初期化

Bool slPushMatrix(void)
  機能 : マトリクススタックのポインタを進め、カレントマトリクスをそれにコピ
	ーする。
	マトリクスは２０個までネストできるが、これをオーバーするとエラーを返す。

Bool slPushUnitMatrix(void)
  機能 : マトリクススタックのポインタを進め、そこに単位行列をセットする。
	ネストしすぎた場合、エラーを返す。

Bool slIncMatrixPtr(void)
  機能 : マトリクススタックのポインタを進める。
	マトリクスは２０個までネストできるが、これをオーバーするとエラーを返す。

Bool slPopMatrix(void)
Bool slDecMatrixPtr(void)
  機能 : マトリクススタックのポインタをひとつ戻す。
	戻しすぎた場合、エラーを返す。

void slUnitMatrix(MATRIX *mtptr)
  機能 : 指定されたマトリクスを単位行列にする。マトリクスに CURRENT を指定
	した場合、マトリクススタックのカレントマトリクスを対象にする。

void slUnitAngle(MATRIX *mtptr)
  機能 : マトリクスの回転部分(３x３)を単位行列にする。
	平行移動部分は変更しない。
	マトリクスに CURRENT を指定した場合カレントマトリクスを変更する。

void slUnitTranslate(MATRIX *mtptr)
  機能 : マトリクスの平行移動部分を０にする。
	回転部分は変更しない。
	マトリクスに CURRENT を指定した場合カレントマトリクスを変更する。

void slLoadMatrix(MATRIX *mtptr)
  機能 : カレントマトリクスに指定されたマトリクスをコピーする。

Bool slCopyMatrix(void)
  機能 : カレントマトリクスにひとつ前のマトリクスをコピーする。
	マトリクスがネストされていない場合にはエラーを返す。

void slRegistMatrix(MATRIX *mtptr)
  機能 : マトリクスバッファに指定されたマトリクスをコピーする。
	マトリクスに CURRENT を指定した場合、マトリクススタックのカレント
	マトリクスを対象にする。

void slGetMatrix(MATRIX *mtptr)
  機能 : カレントマトリクスを指定されたマトリクスにコピーする。

void slGetTranslate(FIXED *pbuf)
  機能 : マトリクスから平行移動成分を取り出し、指定されたバッファにコピーする。

void slLoadTranslate(FIXED M30 , FIXED M31 , FIXED M32)
  機能  : カレントマトリクスの平行移動部分のみを更新します。

void slInversMatrix()
  機能 : カレントマトリクスを逆行列にする。

void slTransposeMatrix()
  機能 : カレントマトリクスを転置行列にする。

void slRotX(ANGLE angx)
  機能 : カレントマトリクスに対し、Ｘ軸回りの回転行列を掛ける。
    回転マトリクスは
	 １.０      ０.０      ０.０      ０.０
	 ０.０     ｃｏｓΘ   ｓｉｎΘ    ０.０
	 ０.０    -ｓｉｎΘ   ｃｏｓΘ    ０.０
	 ０.０      ０.０      ０.０      １.０

void slRotXSC(FIXED sn , FIXED cs)
  機能 : サインと、コサインを指定して、Ｘ軸回りの回転をする。
	 １.０      ０.０      ０.０      ０.０
	 ０.０      ｃｓ       ｓｎ       ０.０
	 ０.０     -ｓｎ       ｃｓ       ０.０
	 ０.０      ０.０      ０.０      １.０

void slRotY(ANGLE angy)
  機能 : カレントマトリクスに対し、Ｙ軸回りの回転行列を掛ける。
	ｃｏｓΘ    ０.０    -ｓｉｎΘ    ０.０
	 ０.０      １.０      ０.０      ０.０
	ｓｉｎΘ    ０.０     ｃｏｓΘ    ０.０
	 ０.０      ０.０      ０.０      １.０

void slRotYSC(FIXED sn , FIXED cs)
  機能 : サインと、コサインを指定して、Ｙ軸回りの回転をする。
	 ｃｓ       ０.０     -ｓｎ       ０.０
	 ０.０      １.０      ０.０      ０.０
	 ｓｎ       ０.０      ｃｓ       ０.０
	 ０.０      ０.０      ０.０      １.０      

void slRotZ(ANGLE angz)
  機能 : カレントマトリクスに対し、Ｚ軸回りの回転行列を掛ける。
	ｃｏｓΘ   ｓｉｎΘ    ０.０      ０.０
       -ｓｉｎΘ   ｃｏｓΘ    ０.０      ０.０
	 ０.０      ０.０      １.０      ０.０
	 ０.０      ０.０      ０.０      １.０

void slRotZSC(FIXED sn , FIXED cs)
  機能 : サインと、コサインを指定して、Ｚ軸回りの回転をする。
	 ｃｓ       ｓｎ       ０.０      ０.０
        -ｓｎ       ｃｓ       ０.０      ０.０
	 ０.０      ０.０      １.０      ０.０
	 ０.０      ０.０      ０.０      １.０

void slRotAX(FIXED vctX , FIXED vctY , FIXED vctZ , ANGLE A)
  機能 : 原点を通る任意軸回りの回転をする。軸は単位ベクトルで指定する。
    ＮｘＮｘ(１-Ｃ)+Ｃ     ＮｘＮｙ(１-Ｃ)+ＮｚＳ ＮｘＮｚ(１-Ｃ)-ＮｙＳ  ０.０
    ＮｙＮｘ(１-Ｃ)-ＮｚＳ ＮｙＮｙ(１-Ｃ)+Ｃ     ＮｙＮｚ(１-Ｃ)+ＮｘＳ  ０.０
    ＮｚＮｘ(１-Ｃ)+ＮｙＳ ＮｚＮｙ(１-Ｃ)-ＮｘＳ ＮｚＮｚ(１-Ｃ)+Ｃ      ０.０
    ０.０                  ０.０                  ０.０                   １.０

    Ｎｘ、Ｎｙ、Ｎｚは 軸を表す単位ベクトルの成分。
    Ｃ はコサイン 、Ｓ はサイン を表す。

void slTranslate(FIXED tx , FIXED ty , FIXED tz)
  機能 : カレントマトリクスに対し、平行移動を行う。
	 ０.０      ０.０      ０.０      ０.０
	 ０.０      ０.０      ０.０      ０.０
	 ０.０      ０.０      ０.０      ０.０
	 ｔｘ       ｔｙ       ｔｚ       １.０

void slRegistTranslate(FIXED tx , FIXED ty , FIXED tz)
  機能 : マトリクスバッファに対して、平行移動したものを、カレントマトリクス
	にコピーする。
	ただし、マトリクスバッファは変更されない。

void slScale(FIXED sx , FIXED sy , FIXED sz)
  機能 : カレントマトリクスに対してスケーリングする。
	 ｓｘ       ０.０      ０.０      ０.０
	 ０.０      ｓｙ       ０.０      ０.０
	 ０.０      ０.０      ｓｚ       ０.０
	 ０.０      ０.０      ０.０      １.０

void slMultiMatrix(MATRIX mtrx)
  機能 : カレントマトリクスに指定されたマトリクスを掛ける。

void slLookAt(FIXED camera[XYZ] , FIXED target[XYZ] , ANGLE angz)
  機能 : カメラ位置から目標方向を見るマトリクスをカレントマトリクスに掛ける。
	その際、Ｚ軸回りに回転もする。
  注意 : Ｙ軸に沿うような方向では、ＸＺ平面上でのベクトルが小さくなり、正し
	く計算できない場合があるかも。

FIXED slSin(ANGLE angs)
  機能 : 指定された角度に対する、サインを返す。
	値としては 0xffff0000 〜 0x00010000 の値。
  注意 : 角度データは 下位の４ビットを捨て、0x0000 〜 0xfff0 に 変換される
	ため、精度はやや落ちる(以下角度を使用するものは同様の制限を受ける)。

FIXED slCos(ANGLE angc)
  機能 : 指定された角度に対する、コサインを返す。
	値としては 0xffff0000 〜 0x00010000 の値。

FIXED slTan(ANGLE angt)
  機能 : 指定された角度に対する、タンジェントを返す。
  注意 : ９０度付近ではタンジェントの値が大き過ぎて、精度はかなり怪しい。

ANGLE slAtan(FIXED tx , FIXED ty)
  機能 : 指定された方向の角度を返す。

Uint16 slSquart(Uint32 sqrt)
  機能 : 符号無し整数の平方根を算出する。

FIXED slSquartFX(FIXED sqrtfx)
  機能 : 符号無し固定小数点数の平方根を算出する。
  注意 : 整数として演算しているため、結果の精度は８ビット整数、８ビット小数
	となる。

FIXED slMulFX(FIXED a,FIXED b)
  機能 : 固定小数同士の掛け算をし、結果を返す。

FIXED slDivFX(FIXED a,FIXED b)
  機能 : 固定小数同士の割り算をし、結果(b/a)を返す。

FIXED slInnerProduct(VECTOR vct1,VECTOR vct2)
  機能 : 二つのベクトルの内積を取り、結果を返す。

void slNormalVector(VECTOR a , b , c , ans)
  機能 : 指定された３点からなる２本のベクトル(b->a , b->c)に直交するベクトル
	(単位法線ベクトル)を算出します。
	法線の向きを逆にしたい場合には指定する点を b , a , c の順にして下さい。

FIXED slRandom()
  機能 : ０から１.０の間の乱数を発生する。

void slBezier(VECTOR p0 , VECTOR p1 , VECTOR p2 , VECTOR p3 ,
		FIXED timming , VECTOR ans)
  機能 : 指定された４点間を結ぶＢｅｚｉｅｒ曲線の timming での位置を返す。
	timming は ０から１.０の範囲で指定する。

FIXED slBallCollision(FIXED object1[XYZ] , FIXED size1
			, FIXED object2[XYZ] , FIXED size2)
  機能 : 位置が object[XYZ] 、半径が size1 の球と object2[XYZ],size2 の球との
	当たり判定を行い、当たっていればその距離を返す。
	当たっていない場合には マイナスの値を返す。

FIXED slCheckOnScreen(FIXED object[XYZ] , FIXED size)
  機能 : 指定されたオブジェクトのポジションをカレントマトリクスを通して変換し、
	その位置で指定されたサイズの物体が画面に表示されるかをテストし、結果を返
	します。
	スクリーンよりも手前の場合には −１(FFFFFFFF)、上下左右に出ている場合には
	−２(FFFFFFFE)、画面内の場合にはＺポジションを返します。

FIXED slCheckOnScreen0(FIXED size)
  機能 : ポジション(０,０,０)にあるオブジェクトが指定されたサイズで画面に表示され
	るかをテストし、結果を返します。
	スクリーンよりも手前の場合には −１(FFFFFFFF)、上下左右に出ている場合には
	−２(FFFFFFFE)、画面内の場合にはＺポジションを返します。

void slCalcPoint(FIXED cx , FIXED cy , FIXED cz , FIXED ans[XYZ])
  機能 : 指定されたポイントをカレントマトリクスで座標変換した結果をバッファに返し
	 ます。

void slSlaveFunc(void (*func)() , void *par)
  機能 : スレーブＣＰＵに指定された関数を実行させる。
	 ポリゴン表示等のファンクションがスレーブへのコマンドバッファ上に残っている
	 場合、それらが終了しないとこのファンクションは実行されないため、実行開始が
	 遅れることがあります。

void slSetTrayCheck(Bool switch)
  削除されました。

FIXED  slConvert3Dto2D( FIXED pos[XYZ], Sint32 ans[XY])
  機能 : カレントマトリクスを使用して、3D相対座標posから実際画面上に表示する際の
	画面座標値ansを返します。関数値として、Z値を返します。
